package com.cmo.common.controller.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import com.cmo.common.utils.Constant;
import com.cmo.common.utils.ToolString;
import com.jfinal.core.Controller;

public class ConnectionController extends Controller {

	public void getConn(){
		String dbtype="2";
				//getPara("dbtype");//数据库类型
		if(ToolString.isBlank(dbtype)){
			renderJson("数据库类型"+Constant.NULL_FAIL_MSG);
			return;
		}
		String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
				//getPara("driver");//数据库驱动
		if(ToolString.isBlank(driver)){
			renderJson("数据库驱动"+Constant.NULL_FAIL_MSG);
			return;
		}
		String url="jdbc:sqlserver://127.0.0.1:1433;databaseName=shineTriage";
				//getPara("url");//数据库连接
		if(ToolString.isBlank(url)){
			renderJson("数据库连接"+Constant.NULL_FAIL_MSG);
			return;
		}
		String username="sa";
				//getPara("username");//用户名
		if(ToolString.isBlank(username)){
			renderJson("用户名"+Constant.NULL_FAIL_MSG);
			return;
		}
		String password="123456";
				//getPara("password");//密码
		if(ToolString.isBlank(password)){
			renderJson("密码"+Constant.NULL_FAIL_MSG);
			return;
		}
		String description="test";
				//getPara("description");//描述
		if(ToolString.isBlank(description)){
			renderJson("描述"+Constant.NULL_FAIL_MSG);
			return;
		}
		if("1".equals(dbtype)){//1oracle
			Connection con = null;// 创建一个数据库连接
			PreparedStatement pre = null;// 创建预编译语句对象，一般都是用这个而不用Statement
			ResultSet result = null;// 创建一个结果集对象
			try {
				Class.forName(driver);// 加载Oracle驱动程序
		        System.out.println("开始尝试连接数据库！");
		        con = DriverManager.getConnection(url, username, password);// 获取连接
		        System.out.println("连接成功！");
		        
		        String sql = "select * from student where name=?";// 预编译语句，“？”代表参数
		        pre = con.prepareStatement(sql);// 实例化预编译语句
		        pre.setString(1, "刘显安");// 设置参数，前面的1表示参数的索引，而不是表中列名的索引
		        result = pre.executeQuery();// 执行查询，注意括号中不需要再加参数
		        while (result.next())
		            // 当结果集不为空时
		            System.out.println("学号:" + result.getInt("id") + "姓名:"
		                    + result.getString("name"));
				
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				try
		        {
		            // 逐一将上面的几个对象关闭，因为不关闭的话会影响性能、并且占用资源
		            // 注意关闭的顺序，最后使用的最先关闭
		            if (result != null)
		                result.close();
		            if (pre != null)
		                pre.close();
		            if (con != null)
		                con.close();
		            System.out.println("数据库连接已关闭！");
		        }
		        catch (Exception e)
		        {
		            e.printStackTrace();
		        }
			}
		}else if("2".equals(dbtype)){//2sqlserver
			try
			{
			Class.forName(driver);//加载数据库引擎，返回给定字符串名的类
			}catch(ClassNotFoundException e)
			{
			System.out.println("加载数据库引擎失败");
			System.exit(0);
			}     
			System.out.println("数据库驱动成功");

			try
			{
			Connection con=DriverManager.getConnection(url,username,password);//连接数据库对象
			System.out.println("连接数据库成功");
			Statement stmt=con.createStatement();//创建SQL命令对象
			/*	//创建表
			System.out.println("开始创建表");
			String query="create table TABLE1(ID NCHAR(2),NAME NCHAR(10))";//创建表SQL语句
			stmt.executeUpdate(query);//执行SQL命令对象
			System.out.println("表创建成功");

			//输入数据
			System.out.println("开始插入数据");
			String a1="INSERT INTO TABLE1 VALUES('1','旭哥')";//插入数据SQL语句
			String a2="INSERT INTO TABLE1 VALUES('2','伟哥')";
			String a3="INSERT INTO TABLE1 VALUES('3','张哥')";
			stmt.executeUpdate(a1);//执行SQL命令对象
			stmt.executeUpdate(a2);   
			stmt.executeUpdate(a3);
			System.out.println("插入数据成功");
			*/
			//读取数据
			System.out.println("开始读取数据");
			ResultSet rs=stmt.executeQuery("SELECT * FROM pager");//返回SQL语句查询结果集(集合)
			//循环输出每一条记录
				while(rs.next())
				{
//				//输出每个字段
			System.out.println(rs.getString("doctor_id")+"\t"+rs.getString("name"));
				}
			System.out.println("读取完毕");

			//关闭连接
			stmt.close();//关闭命令对象连接
			con.close();//关闭数据库连接
			}
			catch(SQLException e)
			{
			e.printStackTrace();
			//System.out.println("数据库连接错误");
			System.exit(0);
			}
		}else if("3".equals(dbtype)){//3mysql
			ResultSet rs=null;  
	        try {  
	            Class.forName(driver);//驱动的类名  
	            Connection conn=  
	            (Connection) DriverManager.getConnection(url, //服务器的IP地址和端口号，数据库的名字  
	                    username,//用户名  
	                    password//密码  
	                    );  
	            Statement stmt=(Statement) conn.createStatement();  
	            rs=stmt.executeQuery("select * from patient_queue");  
	            while(rs.next())  
	            {  
	                System.out.println(rs.getInt(1));  
	                System.out.println(rs.getString(2));  
	                System.out.println(rs.getString(3));  
	            }  
	        } catch (Exception e) {  
	            // TODO Auto-generated catch block  
	            e.printStackTrace();  
	        }  
	        finally  
	        {  
	            if(rs!=null)  
	            {  
	                try {  
	                    rs.close();  
	                } catch (SQLException e) {  
	                    e.printStackTrace();  
	                }  
	            }  
	        }
		}
	}
	
	public static void main(String[] args) {
		ConnectionController cc=new ConnectionController();
		cc.getConn();
	}
}
